/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import domain.Estudiante;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author Lacho
 */
public class daoEstudiante {
    
    Session sesion;
    Transaction tx;
    
    public int guardaEstudiante(Estudiante estudiante) throws HibernateException 
    { 
        int id = 0;  

        try 
        { 
            iniciaOperacion(); 
            id = (int) sesion.save(estudiante); 
            tx.commit(); 
        } catch (HibernateException he) 
        { 
            manejaExcepcion(he); 
            throw he; 
        } finally 
        { 
            sesion.close(); 
        }  

        return id; 
    }  

    public void actualizaEstudiante(Estudiante estudiante) throws HibernateException 
    { 
        try 
        { 
            iniciaOperacion(); 
            sesion.update(estudiante); 
            tx.commit(); 
        } catch (HibernateException he) 
        { 
            manejaExcepcion(he); 
            throw he; 
        } finally 
        { 
            sesion.close(); 
        } 
    }  

    public void eliminaEstudiante(Estudiante estudiante) throws HibernateException 
    { 
        try 
        { 
            iniciaOperacion(); 
            sesion.delete(estudiante); 
            tx.commit(); 
        } catch (HibernateException he) 
        { 
            manejaExcepcion(he); 
            throw he; 
        } finally 
        { 
            sesion.close(); 
        } 
    }  

    public Estudiante obtenEstudiante(int idEstudiante) throws HibernateException 
    { 
        Estudiante estudiante = null;  
        try 
        { 
            iniciaOperacion(); 
            estudiante = (Estudiante) sesion.get(Estudiante.class, idEstudiante); 
        } finally 
        { 
            sesion.close(); 
        }  

        return estudiante; 
    }  

    public List<Estudiante> obtenListaEstudiantes() throws HibernateException 
    { 
        List<Estudiante> listaEstudiantes = null;  

        try 
        { 
            iniciaOperacion(); 
            listaEstudiantes= sesion.createQuery("from Estudiante").list(); 
        } finally 
        { 
            sesion.close(); 
        }  

        return listaEstudiantes; 
    }  

    private void iniciaOperacion() throws HibernateException 
    { 
        sesion = HibernateUtil.getSessionFactory().openSession(); 
        tx = sesion.beginTransaction(); 
        tx.begin();
    }  

    private void manejaExcepcion(HibernateException he) throws HibernateException 
    { 
        tx.rollback(); 
        throw new HibernateException("Ocurrió un error en la capa de acceso a datos", he); 
    }
}
